// 头文件保护语法
#ifndef LINKED_LIST_H
#define LINKED_LIST_H

// 包含linked_list.h头文件也会同步包含它包含的其它头文件
// 根据这一特点, 可以选择将一些共用的头文件包含在此头文件中
#include <header.h>

typedef int DataType;

// 定义链表结点结构
typedef struct node {
	DataType data;           // 数据域
	struct node* next;  // 指针域
} Node;

// 定义链表结构本身
typedef struct {
	Node* head;  // 头指针
	Node* tail;  // 尾结点指针
	int size;  // 用于记录链表的长度
} LinkedList;

// 基础操作函数声明
LinkedList* create_linked_list();                     // 创建一个空的链表
void destroy_linked_list(LinkedList* list);           // 销毁链表

bool add_before_head(LinkedList* list, DataType data);        // 头部插入结点
bool add_behind_tail(LinkedList* list, DataType data);        // 尾部插入结点
bool add_index(LinkedList* list, int index, DataType data); // 按索引插入结点

Node* search_by_index(LinkedList* list, int index);          // 根据索引搜索结点
Node* search_by_data(LinkedList* list, DataType data);             // 根据数据搜索结点
bool delete_node_by_data(LinkedList* list, DataType data);         // 根据数据删除结点
bool delete_by_idx(LinkedList* list, int idx);         // 根据索引删除结点


#endif // !LINKED_LIST_H
